interface ICommand
{
    string Excute();
}

class HelloCommand : ICommand
{
    public string Excute() => "Hello Command!";
}

class CommandLog : ICommand
{
    protected ICommand Command { get; private set; }

    public CommandLog(ICommand command)
    {
        this.Command = command;
    }
    
    public virtual string Excute() => $"[Log]: {Command.Excute()}";
}

void ExcuteCommand(ICommand cmd)
{
    Console.WriteLine(cmd.Excute());
}

ICommand hello = new HelloCommand();
ICommand log_hello = new CommandLog(hello);

ExcuteCommand(hello);
ExcuteCommand(log_hello);


output
----
Hello Command!
[Log]: Hello Command!